#include <stdio.h>
#include <stdlib.h>

struct Book
{
    char title[128];    //信息域
    char author[40];    //信息域

    struct Book *next;   //指针域
};

void getInput(struct Book *book)
{
    printf("请输入书名:");
    scanf("%s", book->title);
    printf("请输入作者:");
    scanf("%s", book->author);
}

void addBook(struct Book **library)//两层节引用
{
    struct Book *book, *temp;

    book = (struct Book *)malloc(sizeof(struct Book));
    if (book == NULL)
    {
        printf("内存分配失败!\n");
        exit(1);
    }

    getInput(book);

    if (*library != NULL)
    {
        temp = *library;
        *library = book;
        book->next = temp;
    }
    else
    {
        *library = book;
        book->next = NULL;
    }
}

void printLibrary(struct Book *library)
{
    struct Book *book;
    int count = 1;

    book = library;
    while (book != NULL)
    {
        printf("Book%d:\n", count);
        printf("书名:%s\n", book->title);
        printf("作者:%s\n", book->author);
        book = book->next;
        count++;
    }
}

void releaseLibrary(struct Book *library)
{
    while (library != NULL)
    {
        free(library);
        library = library->next;
    }
}

int main(void)
{
    int ch;
    struct Book *library = NULL;

    addBook(&library);

    while (1)
    {
        printf("请问是否需要录入书籍信息(Y/N):");

        do
        {
            ch = getchar();
        } while (ch != 'Y' && ch != 'N');
        if (ch == 'Y')
        {
            addBook(&library);
        }
        else
        {
            break;
        }
    }

    printf("请问是否需要打印图书信息(Y/N):");
    do
    {
        ch = getchar();
    } while (ch != 'Y' && ch != 'N');

    if (ch == 'Y')
    {
        printLibrary(library);
    }

    releaseLibrary(library);

    return 0;
}
